//index.js
const app = getApp()
import Dialog from '../../miniprogram_npm/@vant/weapp/dialog/dialog';
Page({
	data: {
		avatarUrl: './user-unlogin.png',
		userInfo: {},
		guize: false,
		sharetype: "guess",
		canIUse: false,
		result: {},
		openid: '',
		userData: {},
		guizeList: {},
	},

	onLoad: function() {
		if (!wx.cloud) {
			wx.redirectTo({
				url: '../chooseLib/chooseLib',
			})
			return
		}
		if (app.globalData.openid) {
			this.setData({
				openid: app.globalData.openid
			})
			/**
			 * 获取用户登录时间,判断用户是今日新登录的 重置答题次数
			 */
			this.getUserInfoLevel(app.globalData.openid)
		} else {
			const db = wx.cloud.database();
			//获取用户openId
			wx.cloud.callFunction({
				name: 'login',
				success: res => {
					app.globalData.openid = res.result.openid;
					this.setData({
						openid: res.result.openid
					})
					// 查找用户闯关次数
					this.getUserInfoLevel(res.result.openid)
				},
				fail: err => {
					console.error('[云函数] [login] 调用失败：', err);
				}
			})
		}

		let userInfo = wx.getStorageSync('userInfo');
		if (Object.keys(userInfo).length === 0) {
			//没有用户信息
			this.setData({
				canIUse: false,
			})
		} else {
			//拥有用户信息
			this.setData({
				canIUse: true,
				userInfo: userInfo
			})
		}

		/**
		 * 获取规则信息
		 */
		const db = wx.cloud.database();
		//通过 openId 去查询数据库
		db.collection('guize').aggregate().match({
			status: true
		}).end().then(res => {
			var data = res.list;
			"collection.aggregate:ok" == res.errMsg && (
				this.setData({
					guizeList: res.list
				})
			);
		})

	},
	onShow: function() {

	},
	onReady: function() {
		this.onLoad();
	},

	guizeShowbox: function() {
		this.setData({
			guize: true
		})
	},
	guizeClosebox: function() {
		this.setData({
			guize: false
		})
	},
	gotoGame: function() {
		// 查新用户是否登录,若没有 请登录
		if (!this.data.canIUse) {
			this.setData({
				canIUse: false
			})
		} else {
			//更新玩游戏的时间
			//通过
			this.getUserInfo();
		}
	},
	/**
	 * @param {Object} e
	 * 通过openId 去查询数据库, 如果有 就更新 没有就插入
	 */
	getUserInfo() {
		const db = wx.cloud.database();
		//获取用户openId
		if (this.data.openid) {
			//通过 openId 去查询数据库
			db.collection('user').where({
				user_openid: this.data.openid
			}).get({
				success: res => {
					if (res.data.length === 0) {
						//插入数据
						//this.userAdd();
						this.setData({
							canIUse: false
						})
					} else {
						//查找用户最近一次登录日期
						//获取今日0点时间戳
						var myDate = new Date(new Date().toLocaleDateString()).getTime();
						//如果当前时间(今日时间)大于登录时间
						if (res.data[0].loginTime < myDate) {
							//更新时间戳
							db.collection('user').doc(res.data[0]._id).update({
								data: {
									loginTime: myDate,
									today: 0
								},
								success: res => {
									this.userUpdate(res.data[0].count, res.data[0]._id, res.data[0].today);
								},
								fail: err => {
									icon: 'none',
									console.error('[数据库] [更新记录] 失败：', err)
								}
							})
						} else {
							if (res.data[0].today > 9) {
								wx.showToast({
									title: '超过今日答题次数',
								})
							} else {
								//更新数据
								this.userUpdate(res.data[0].count, res.data[0]._id, res.data[0].today);
							}
						}
					}
				},
				fail: err => {
					wx.showToast({
						icon: 'none',
						title: '查询记录失败'
					})
					console.error('[数据库-user] [查询记录] 失败：', err)
				}
			})
		}
	},
	
	addUserInfo:function(){
		const db = wx.cloud.database();
		//获取用户openId
		if (this.data.openid) {
			//通过 openId 去查询数据库
			db.collection('user').where({
				user_openid: this.data.openid
			}).get({
				success: res => {
					if (res.data.length === 0) {
						//插入数据
						this.userAdd();
					} else {
						this.setData({
							userData: res.data[0]
						})
					}
				},
				fail: err => {
					wx.showToast({
						icon: 'none',
						title: '查询记录失败'
					})
					console.error('[数据库-user] [查询记录] 失败：', err)
				}
			})
		}
	},

	/**
	 * @param {Object} openId
	 * 通过openId 查询用户库信息并赋值给userData
	 */
	getUserInfoLevel(openId) {
		const db = wx.cloud.database();
		//通过 openId 去查询数据库
		db.collection('user').where({
			user_openid: openId
		}).get({
			success: res => {
				this.setData({
					userData: res.data[0]
				})
			},
			fail: err => {
				wx.showToast({
					icon: 'none',
					title: '查询记录失败'
				})
				console.error('[数据库-user] [openId] 失败：', err)
			}
		})
	},

	/**
	 * @param {Object} e
	 * 数据库没有该用户保存该用户的信息
	 */
	userAdd() {
		const db = wx.cloud.database();
		let userInfo = this.data.userInfo;
		let openId = this.data.openid;
		let date = Date.now();
		db.collection('user').add({
			data: {
				count: 1,
				avatarUrl: userInfo.avatarUrl,
				city: userInfo.city,
				country: userInfo.country,
				gender: userInfo.gender,
				language: userInfo.language,
				nickName: userInfo.nickName,
				province: userInfo.province,
				user_openid: openId,
				today: 1,
				loginTime: date,
				level: 0,
				jinbi:0
			},
			success: res => {
				// 在返回结果中会包含新创建的记录的 _id
				console.log('[数据库] [新增记录] 成功，记录 _id: ', res._id);
				//跳转到游戏页面
				// wx.navigateTo({
				// 	url: "/pages/game/game"
				// });
			},
			fail: err => {
				console.error('[数据库] [新增记录] 失败：', err)
			}
		})
	},

	userUpdate: function(count, id, today) {
		const db = wx.cloud.database()
		const newCount = count + 1;
		const newToday = today + 1;
		db.collection('user').doc(id).update({
			data: {
				count: newCount,
				today: newToday
			},
			success: res => {
				//跳转到游戏页面
				wx.redirectTo({
					url: "/pages/game/game"
				});
			},
			fail: err => {
				icon: 'none',
				console.error('[数据库] [更新记录] 失败：', err)
			}
		})
	},

	bindGetUserInfo(e) {
		var i = this;
		// 获取用户信息
		wx.getUserProfile({
			desc: '获取你的昵称、头像、地区及性别',
			success: res => {
				this.setData({
					avatarUrl: res.userInfo.avatarUrl,
					userInfo: res.userInfo,
					canIUse: true
				})
				// 更新用户表
				try {
					wx.setStorageSync('userInfo', this.data.userInfo);
					app.globalData.userInfo = res.userInfo;
					this.addUserInfo();
					//刷新页面
					// this.onLoad();
				} catch (e) {
					console.log("存储本地用户信息失败");
				}
			},
			fail: function(err) {
				console.log("获取失败: ", err)
			}
		})
	},

	onShareTimeline: function() {

	},
	onShareAppMessage: function() {},
	/**
	 * 跳转到签到页面
	 */
	gotoSign: function() {
		Dialog.alert({
			message: '内容升级中,客官敬请期待!',
			theme: 'round-button',
		}).then(() => {
			// on close
		});
	},
	
	/**
	 *  跳转到排行榜页面
	 */
	gotoPaihang:function(){
		wx.navigateTo({
			url: "/pages/paihang/paihang"
		});
	},
	
	/**
	 * 跳转到更多页面
	 */
	gotoMore:function(){
		Dialog.alert({
			message: '内容升级中,客官敬请期待!',
			theme: 'round-button',
		}).then(() => {
			// on close
		});
	},
	/**
	 * 跳转到更多页面
	 */
	gotoQua:function(){
		Dialog.alert({
			message: '内容升级中,客官敬请期待!',
			theme: 'round-button',
		}).then(() => {
			// on close
		});
	},
})
